home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / C64 / U-Utilities / (c)u3.d64 / file copy.c (.txt) < prev    next >
Commodore BASIC  |  2007-02-11  |  5KB  |  203 lines

  1. 20 PRINT CHR$(147)
  2. 30 PRINT "       SINGLE DRIVE FILE COPY"
  3. 35 PRINT"[159]         ONE MOMENT PLEASE"
  4. 40 POKE 52,31:POKE 56,31:CLR
  5. 45 FOR I=0TO173
  6. 50 READ D:POKE 7936+I,D:NEXT
  7. 55 POKE785,0:POKE786,31
  8. 60 PL$=CHR$(19)
  9. 65 FORI=1TO24:PL$=PL$+CHR$(17):NEXT
  10. 70 FORI=1TO39:CL$=CL$+" ":NEXT
  11. 75 CL$=CL$+CHR$(13)+CL$+CHR$(13)
  12. 80 CL$=LEFT$(PL$,21)+CL$+CL$+"[145][145][145][145]"
  13. 83 SP$="[145]                                      "
  14. 84 Z$="                                      "
  15. 85 OPEN 15,8,15:REM OPEN ERROR CHAN
  16. 90 GOTO 1000
  17. 100 :
  18. 110 REM READ THE DIRECTORY
  19. 130 POKE785,0:REM SELECT READ FUNCTION
  20. 140 PRINT#15,"I":OPEN 2,8,2,"$"
  21. 150 NB=USR(2):REM LOAD DIR INTO MEM
  22. 160 CLOSE 2:GOSUB 810:REM CHECK ERROR
  23. 170 RETURN
  24. 200 :
  25. 210 REM DISPLAY DISK NAME
  26. 230 POKE 785,6:REM SELECT FETCH CHAR
  27. 235 PRINT CHR$(147)
  28. 240 PRINT LEFT$(PL$,3);CHR$(18);
  29. 250 FORK=142TO169
  30. 260 PRINT CHR$(USR(K));:NEXT
  31. 270 PRINT CHR$(146)
  32. 280 RETURN
  33. 300 :
  34. 310 REM PRINT DIRECTORY ENTRY DE
  35. 330 POKE785,6:REM SELECT FETCH CHAR     340 IX=(DE-1)*32+254-INT((DE-1)/8)*2
  36. 340 IX=(DE-1)*32+254-INT((DE-1)/8)*2
  37. 345 IF USR(IX)<128 THEN RETURN
  38. 350 TY=USR(IX)-128:IF TY=0 OR TY>3 THEN RETURN
  39. 360 FOR K=IX+3 TO IX+18
  40. 370 PRINT CHR$(USR(K));
  41. 380 NEXT:PRINT TAB(16);",";
  42. 390 PRINT MID$("SPU",TY,1):RETURN
  43. 400 :
  44. 410 REM GET DESTINATION DISK
  45. 430 PRINT CL$;
  46. 440 PRINT "[159]      INSERT DESTINATION DISK[154]"
  47. 450 MS$="      PRESS RETURN[146] WHEN READY"
  48. 455 NL=1
  49. 460 GOSUB5000
  50. 480 IFDM$<>CHR$(13)GOTO460
  51. 490 PRINT#15,"I":RETURN
  52. 500 :
  53. 510 REM GET A FILE TO COPY
  54. 530 PRINT CL$;:IFEN=63GOTO580
  55. 560 NM$="":EN=0:UE=0
  56. 565 PRINT"[159]ENTER FILE,TYPE. RETURN[146] SCROLLS DIR'Y[154]"
  57. 570 INPUTNM$,TY$:RETURN
  58. 580 PRINTCL$;"[159]THERE'S ALREADY A [154]";NM$
  59. 582 PRINT"[159]DO YOU WISH TO REPLACE?(Y/N)[154]"
  60. 583 GET RE$:IFRE$=""GOTO583
  61. 584 IFRE$="Y"THEN GOTO 6000
  62. 586 PRINT"[159]ENTER NEW NAME[154]";
  63. 590 EN=0:NM$="":INPUT NM$
  64. 595 RETURN
  65. 600 :
  66. 610 REM READ THE FILE
  67. 630 POKE785,0:REM SELECT READ FUNCTION
  68. 640 OPEN 2,8,2,NM$+","+TY$+",R"
  69. 650 GOSUB900:IFEN<>0 THEN CLOSE2:RETURN
  70. 660 NB=USR(2):REM READ THE FILE
  71. 670 CLOSE 2:GOSUB 800:REM CHECK RESULTS
  72. 680 RETURN
  73. 700 :
  74. 710 REM WRITE THE FILE
  75. 730 POKE785,3:REM SELECT WRITE FUNCTION
  76. 740 OPEN 2,8,2,NM$+","+TY$+",W"
  77. 750 GOSUB900:IFEN<>0 THEN CLOSE2:RETURN
  78. 760 NB=USR(2):REM WRITE THE BYTES
  79. 770 CLOSE2:GOSUB 800:REM CHECK RESULTS
  80. 779 CLOSE2:GOSUB 800:REM CHECK RESULTS
  81. 780 RETURN
  82. 800 :
  83. 810 REM CHECK USR() RETURN VALUE
  84. 830 NB=NB-(NB<0)*65536
  85. 840 IFNB<61440 THEN UE=0:RETURN
  86. 850 IFNB=61440 THENUE=128:RETURN
  87. 860 PRINTCL$
  88. 870 IF PEEK(785)=0 THEN PRINT"READ"
  89. 880 IF PEEK(785)=3 THEN PRINT"WRITE"
  90. 890 PRINT" ERROR #";NB-61440:END
  91. 900 :
  92. 910 REM REAFD ERROR CHANNEL
  93. 940 INPUT#15,EN,EM$,ET,ES
  94. 950 IFEN=0OREN=62OREN=63 THEN RETURN
  95. 960 CLOSE 15:PRINTCL$;
  96. 970 PRINT "DISK ERROR #";EN
  97. 980 PRINT LEFT$(PL$,22);EM$:END
  98. 1000 :
  99. 1010 REM MAIN ROUTINE
  100. 1030 PRINT CHR$(147);:REM CLEAR SCREEN
  101. 1035 PRINT""
  102. 1040 PRINT"[159]          INSERT SOURCE DISK[154]"
  103. 1042 MS$="        PRESS RETURN[146] WHEN READY"
  104. 1043 NL=3
  105. 1044 GOSUB5000
  106. 1046 IF DM$<>CHR$(13)THEN 1044
  107. 1050 PRINT:PRINTTAB(10);"[158]READING DIRECTORY";"[154]"
  108. 1060 GOSUB 110:REM READ THE DIRECTORY
  109. 1070 GOSUB 210:REM DISPLAY TITLE
  110. 1080 NS=INT((NB+1)/254)
  111. 1090 IFNS=1GOTO5000:REM NO FILES
  112. 1100 DS=1
  113. 1110 IF NS<=DS THEN DS=1:REM START OVER
  114. 1120 PRINT LEFT$(PL$,4);
  115. 1130 BE=(DS-1)*8+1:LE=BE+15
  116. 1140 IF DS+1=NS THEN LE=BE+8
  117. 1150 FOR DE=BE TOLE
  118. 1160 GOSUB 300:NEXT:REM DISPLAY FILES
  119. 1170 FORI=PEEK(214)TO20:REM CLEAR
  120. 1180 PRINT"                    "
  121. 1190 NEXT
  122. 1200 GOSUB 500:REM GET FILE NAME
  123. 1210 IF NM$="" THENDS=DS+2:GOTO1110
  124. 2000 :
  125. 2010 REM COPY THE FILE
  126. 2030 PRINTCL$;
  127. 2040 PRINT"       [158]READING ";NM$;"[154]"
  128. 2050 GOSUB 600:REM READ THE FILE
  129. 2060 IF EN=62ORUE=128 GOTO1200
  130. 2070 BC=NB:REM SAVE COUNT
  131. 2080 GOSUB 400:REM GET DEST. DISK
  132. 2090 PRINT CL$;"         [158]WRITING ";NM$;"[154]"
  133. 2100 GOSUB 700:REM WRITE THE FILE
  134. 2110 IF ENN=0 GOTO3000
  135. 2120 GOSUB 500:REM GET NEW FILE
  136. 2130 IF NM$<>"" GOTO2090
  137. 2140 PRINT CL$;"[159]FILE NOT COPIED[154]"
  138. 2150 GOTO3100
  139. 3000 :
  140. 3010 REM DISPLAY COMPLETION STATUS
  141. 3030 PRINT CL$;"[159]";
  142. 3040 IF NB<>BC GOTO3060
  143. 3050 PRINT"COPY SUCCESSFUL.  ";:GOTO3070
  144. 3060 PRINT "ERROR. ONLY ";NB;" OUT ";
  145. 3070 PRINT BC;"BYTES COPIED."
  146. 3100 PRINT"PRESS ";CHR$(18);
  147. 3110 PRINT "RETURN";CHR$(146);
  148. 3120 PRINT" TO COPY ANOTHER FILE"
  149. 3125 PRINT"PRESS ANY OTHER KEY TO EXIT[154]"
  150. 3130 GET DM$:IF DM$=""GOTO3130
  151. 3140 IFDM$=CHR$(13) GOTO1000
  152. 3150 END
  153. 4000 :
  154. 4010 REM NO FILES ERROR HANDLING
  155. 4030 PRINT LEFT$(PL$,21);
  156. 4040 PRINT"NO FILES ON THIS DISK."
  157. 4050 PRINT"PRESS RETURN TO TRY ANOTHER DISK."
  158. 4070 GET DM$:IF DM$="" GOTO4070
  159. 4080 IF DM$=CHR$(13) GOTO1000
  160. 4090 END
  161. 5000 GET DM$:IFDM$<>""THEN RETURN
  162. 5005 PRINT MS$
  163. 5007 IFNL=1GOTO5060
  164. 5010 FOR I=1TO300:NEXT:PRINT SP$;"[145][145][145][145]"
  165. 5020 FORI=1TO200:NEXT
  166. 5040 GET DM$:IFDM$=""THEN5000
  167. 5050 RETURN
  168. 5060 FORI=1TO300:NEXT:PRINT SP$;"[145]"
  169. 5070 GOTO5020
  170. 6000 REM REPLACE SUBROUTINE
  171. 6005 PRINTCL$;
  172. 6010 PRINT#15,"S0:"+NM$:GOTO595
  173. 6040 REM    RETURN
  174. 7000 PRINTCL$:FORI=1TO5:PRINTZ$:NEXT:PRINTCL$
  175. 7010 RETURN
  176. 10000 DATA 76,15,31,76,88,31,76,154
  177. 10010 DATA 31,108,3,0,108,5,0,32
  178. 10020 DATA 9,31,152,170,32,198,255,168
  179. 10030 DATA 176,57,169,0,133,251,169,32
  180. 10040 DATA 133,252,160,0,32,207,255,145
  181. 10050 DATA 251,230,251,208,2,230,252,165
  182. 10060 DATA 144,208,13,165,252,201,160,144
  183. 10070 DATA 235,32,204,255,160,0,240,19
  184. 10080 DATA 164,144,32,204,255,192,64,208
  185. 10090 DATA 10,164,251,165,252,56,233,32
  186. 10100 DATA 76,12,31,169,240,76,12,31
  187. 10110 DATA32,9,31,152,170,32,201,255
  188. 10120 DATA 168,176,240,165,251,141,174,31
  189. 10130 DATA165,252,141,175,31,169,0,133
  190. 10140 DATA 251,169,32,133,252,160,0,177
  191. 10150 DATA 251,32,210,255,164,144,208,20
  192. 10160 DATA230,251,208,2,230,252,165,252
  193. 10170 DATA 205,175,31,144,234,165,251,205
  194. 10180 DATA 174,31,144,227,32,204,255,76
  195. 10190 DATA 73,31,32,9,31,132,251,24
  196. 10200 DATA 105,32,133,252,160,0,177,251
  197. 10210 DATA 168,169,0,76,12,31
  198. 20100 TL=0:FORI=0TO173
  199. 20110 TL=TL+PEEK(7936+I)
  200. 20120 T=INT((I+1)/8)*8-1
  201. 20130 IF T=ITHENPRINTTL,:TL=0
  202. 20140 NEXT:PRINT TL
  203.